//导入bcrypt加密模块
const bcrypt = require('bcrypt');
//导入用户集合构造函数
const { User } = require('../../model/user');

module.exports = async (req, res) => {
	//接收请求参数
	const {email, password} = req.body;
	//对数据进行判断 此时是为了防止前面的html代码中的js在浏览器中运行时被禁止JavaScript运行
	// if (email.trim().length == 0 || password.trim().length == 0) return res.status(400).send('<h4>用户名或密码错误</h4>');
    if (email.trim().length == 0 || password.trim().length == 0) return res.status(400).render('admin/error', {msg: '用户名或密码错误'});
    //根据邮箱地址查询用户信息
    //如果查询到了用户信息 user变量的值是对象类型 对象中存储的是用户信息
    //如果没有查询到用户 user变量为空
    //es6中 如果属性和属性值相同 则可省略属性值
    let user = await User.findOne({email});
    //c查询到了用户
    if (user) {
    	//比对密码
    	//true 对比成功 false 对比失败
    	const isEqual = await bcrypt.compare(password, user.password);
    	if (isEqual) {
    		//登录成功
    		//将用户名存储在请求对象中
    		req.session.username = user.username;
            //将用户角色存储在session对象中
            req.session.role = user.role;
    		req.app.locals.userInfo = user;
    		//判断用户身份
    		if (user.role == 'admin') {
                //重定向到用户列表页面
                res.redirect('/admin/user');
            } else {
                res.redirect('/home/')
            }
    		// res.send('登录成功');
    	} else {
    		//没有查询到用户
    	    res.status(400).render('admin/error', {msg: '邮箱地址或密码错误'});
    	}
    } else {
    	//没有查询到用户
    	res.status(400).render('admin/error', {msg: '邮箱地址或密码错误'});
    }
}